package rabbitmq.config;

import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * 声明一个路由交换机 声明一个队列 绑定路由交换机
 * demo_ex direct类型
 * demo_queue
 * demo_rk 队列绑定key
 */
@Configuration
@Slf4j
public class DeclareConfig {
    //声明队列 创建队列queue的bean对象
    @Bean
    public Queue demoQueue(){
        //1.了解queue属性 可以直接new
        //队列超时时间
        /*Map<String,Object> args=new HashMap<>();
        args.put("x-expires",10000);
        return new Queue("demo_queue",false,false,false,args);*/
        //2.作为框架 封装的代码更易读
        return QueueBuilder.nonDurable("demo_queue").build();
    }
    //声明交换机
    @Bean
    public Exchange demoExchange(){
        //1.了解交换机属性 可以直接new
        //return new DirectExchange("demo_ex");
        //2.通过内部来builder构建起
        return ExchangeBuilder.directExchange("demo_ex").build();
    }
    //绑定 在框架绑定关系也是bean
    @Bean
    public Binding demoBinding(){
        //1.了解绑定直接new queueBind
        //return new Binding("demo_queue", Binding.DestinationType.QUEUE, "demo_ex", "demo", null);
        //2.builder构建
        return BindingBuilder.bind(demoQueue()).to(demoExchange()).with("demo_rk").noargs();
    }
    //思考 直接实现 延迟 死信结构的声明 2个交换机 2个队列 2个绑定关系 一个队列属性x-message-ttl dead letter
}
